package net.dgg.zz.production.inProcess.dao;


import net.dgg.zz.production.entity.ProductOrder;
import net.dgg.zz.production.entity.UpdateZzscOrderDto;
import net.dgg.zz.production.inProcess.entity.ProductNodeOperating;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;


/**
 * <p>@Title 生产订单Dao</p>
 * <p>@Description 生产订单Dao</p>
 * <p>@Version 1.0.0 版本号</p>
 * <p>@author maoquanyi</p>
 * <p>@date 2018年08月13日</p>
 * <p>Copyright © dgg group.All Rights Reserved. 版权信息</p>
 */
@Component
public interface ProductOrderDao {


	/**
	* <p>@Description 用于生产工作台统计</p>
	* <p>@author mqy</p>
	* <p>@Time 2018/9/6 0006 9:36 创建时间</p>
	* <p>@return</p>
	*/
	int productionOrderCount(Map params);


    int deleteByPrimaryKey(Long id);

    int iboosInsertSelective(ProductOrder record);
    
    /**
     * iboos插入订单操作
     * @param productorder
     * @return
     */
    int insertSelective(ProductOrder productorder);

    ProductOrder selectByPrimaryKey(Long id);

	List<ProductOrder> selectByPrimaryKeyAll(@Param("ids") List<Long> ids);

    int updateByPrimaryKeySelective(ProductOrder record);

    int updateByPrimaryKey(ProductOrder record);

	/**
	 * <p>@Description 首页工作台办理超期分页数据</p>
	 * <p>@author mqy</p>
	 * <p>@Time 2018/8/13 0013 15:16 创建时间</p>
	 * <p>@return</p>
	 */
	List<Map> queryExceedListPage(Map params);

	/**
	 * <p>@Description 首页工作台办理超期分页条数</p>
	 * <p>@author mqy</p>
	 * <p>@Time 2018/8/13 0013 15:16 创建时间</p>
	 * <p>@return</p>
	 */
	Integer exceedCount(Map params);

    /**
    * <p>@Description 办理中分页数据</p>
    * <p>@author mqy</p>
    * <p>@Time 2018/8/13 0013 15:16 创建时间</p>
    * <p>@return</p>
    */
    List<Map> queryInProcessListPage(Map params);

	/**
	 * <p>@Description 办理中数据</p>
	 * <p>@author mqy</p>
	 * <p>@Time 2018/8/13 0013 15:16 创建时间</p>
	 * <p>@return</p>
	 */
	List<Map> queryInProcessList(Map params);

    /**
     * <p>@Description 办理中分页条数</p>
     * <p>@author mqy</p>
     * <p>@Time 2018/8/13 0013 15:16 创建时间</p>
     * <p>@return</p>
     */
    Integer inProcessCount(Map params);
    /**
     * <p>@Description 查询生产订单返回map</p>
     * <p>@author mqy</p>
     * <p>@Time 2018/8/20 0020 11:41 创建时间</p>
     * <p>@return</p>
     */
    Map queryProductMap(Map params);
    
    
    /**
    * <p>@Description 根据订单ID查询相关生产订单</p>
    * <p>@author mqy</p>
    * <p>@Time 2018/8/24 0024 11:54 创建时间</p>
    * <p>@return</p>
    */
    List<Map> queryRelationProductOrder(Map params);

    /**
    * <p>@Description 接口专用: 根据销售订单ID查询所有生产订单信息</p>
    * <p>@author mqy</p>
    * <p>@Time 2018/9/19 0019 14:41 创建时间</p>
    * <p>@return</p>
    */
    List<Map> queryProductOrderByOrderId(Map params);


    /*  ========================  以上为办理中分界线 ========================  */


    //ProductOrder getById(@Param(value = "id") Long id);
    


    /*  ========================  以上为办理中分界线 ========================  */
    
    /**
     * 查询所有待接收的列表
     * @param params
     * @return
     */
    List<Map> findWaitReceiveAllWithPage(Map params);
    
    /**
     * 所有已分配的列表
     * @param params
     * @return
     */
    List<Map> allocatedScOrderWithPage(Map params);
    /**
     * 我的生产订单
     * @param params
     * @return
     */
    List<Map> myScOrderWithPage(Map params);
    /**
     * 部门生产订单
     * @param params
     * @return
     */
    List<Map> deptScOrderWithPage(Map params);
    /**
     * 所有生产订单
     * @param params
     * @return
     */
    List<Map> allScOrderWithPage(Map params);
	/**
	 * 所有中止
	 * @param param
	 * @return
	 */
	List<Map> stopScOrderWithPage(Map param);
    /**
     * 查询所有待分配的列表
     * @param params
     * @return
     */
    List<Map> findWaitDistributionAllWithPage(Map params);
    /**
	 * @param param 参数信息
	 * @return
	 */
	public int distributionProductOrder(Map param); 
	
	/**
	 * 订单退单
	 * @param param
	 * @return
	 */
	public int returnOrder(Map param);
	/**
	 * 订单退回
	 * @param param
	 * @return
	 */
	public int goBack(Map param);
	
	/**
	 * 订单备注
	 * @param param
	 * @return
	 */
	public int remarkOrder(Map param);
	/**
	 * 接收订单
	 * @param param
	 * @return
	 */
	public int receivedOrder(Map param);
	/**
	 * 订单转单
	 * @param param
	 * @return
	 */
	public int transferOrder(Map param);
	/**
	 * 订单转交
	 * @param param
	 * @return
	 */
	public int devolveonOrder(Map param);

	/**
	 * 根据订单id查询
	 * @param
	 * @return
	 */
	List<ProductOrder> selectByOrderId(Map params);

	/**
	 * 事业部订单待分配
	 * @param params
	 * @return
	 */
	List<Map> orgOrderWaitAllotWithPage(Map params);


	List<Map> selectScOrderCount(Map params);

	Map selectScOrderCountTotal(Map params);

	/**
	 * 生产订单数据导出
	 * @param params
	 * @return
	 */
	List<Map> exportOrderData(Map params);

	/*
	 * @Author zsx
	 * @Date 2018-11-13 10:11:37
	 * @Description 根据订单编号查询订单id
	 */
	List<Long> selectOrderIdByScOrderNo(Map<String,String> params);

    ProductOrder queryLatestScOrder(Map<String,Object> params);


	List<ProductOrder> queryAllScorder(Long orderId);

	List<LinkedHashMap> queryBusinessProgress(Map<String, Object> params);

    List<Map> customerScOrderWithPage(Map params);

	List<ProductOrder> selectByOrderNo(Map params);

	/**
	 * @Title:
	 * @Description: TODO 根据销售订单ID查询所有生产订单信息
	 * @param:
	 * @return:
	 * @throw:
	 * @author: sdx
	 * @creat_date: 2019/8/26
	 **/
	List<Map<String, Object>> getZzProductOrderByOrderId(Map map);
	/**
	 * @Title:
	 * @Description: TODO 企大宝生产订单ID获取业务办理进度顺序排列
	 * @param:
	 * @return:
	 * @throw:
	 * @author: sdx
	 * @creat_date: 2019/12/06
	 **/
	List<ProductNodeOperating> getProductOrderById(Map map);

	/**
	 * @Title:
	 * @Description: TODO 企大宝生产订单ID获取业务办理进度顺序排列
	 * @param:
	 * @return:
	 * @throw:
	 * @author: sdx
	 * @creat_date: 2019/12/06
	 **/
	List<ProductNodeOperating> getProductNodeById(Map map);


	/**
	 * @return
	 * @Author sdx
	 * @Description //TODO 修改合同号
	 * @Date 2020/02/19
	 * @Param
	 **/
	void updateContractNoById(Map<String, Object> params);


	int updateOrderInfo(UpdateZzscOrderDto updateZzscOrderDto);

	/**
	 *
	 * @param scOrderIds
	 * @return
	 */
	List<Map<String,Object>> getScOrderAndTask(@Param("scOrderIds") List<Long> scOrderIds);

	/**
	 *
	 * @param taskId
	 * @return
	 */
	List<Map<String, Object>> getNodeRecords(@Param("taskId") String taskId, @Param("scOrderId") String scOrderId, @Param("start") Integer start, @Param("limit") Integer limit);

	/**
	 *
	 * @param taskId
	 * @return
	 */
	Integer getNodeRecordsTatolCount(@Param("taskId") String taskId, @Param("scOrderId") String scOrderId);

	/**
	 *
	 * @param taskId
	 * @return
	 */
	Integer getIsTaskSwitching(@Param("taskId") String taskId, @Param("scOrderId") String scOrderId);

	/**
	 * 根据生产单id查询资质生产单
	 * @param scOrderId
	 * @return
	 */
	ProductOrder getProductOrderByScOrderId(@Param("scOrderId") String scOrderId);

	/**
	 * 修改生产单售后状态
	 * @param productOrder
	 */
	void updateAfterSaleStatus(ProductOrder productOrder);

	/**
	 * 根据客户ID修改客户名称
	 * @param customerId
	 * @param customerName
	 */
	void updateCustomerName(@Param("customerId") String customerId, @Param("customerName") String customerName);
}